package com.softeem.hbsmvideo.controller;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.softeem.hbsmvideo.entity.Category;
import com.softeem.hbsmvideo.entity.Video;
import com.softeem.hbsmvideo.service.UserService;
//import org.apache.catalina.User;
import com.softeem.hbsmvideo.entity.User;
import com.softeem.hbsmvideo.vo.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/*
* 用户的业务接口
* */
@RequestMapping("/user")
@RestController
public class UserController {
    //todo 完成用户相关业务功能开发
    // 1. 用户注册（含加密）
    // 2. 用户登录
    // 3. 修改用户信息
    // 4. 用户列表查询
    // 5. 根据ID删除用户对象

    @Autowired//自动装配
    private UserService userService;

    @GetMapping("/add")
    public boolean add(User user){
        //根据名称查询管理员
        boolean b=userService.exists(Wrappers.query(User.class).eq("username", user.getUsername()));
        if(b){
            //用户存在
            return false;
        }
        //实现对密码的加密
        //生成随机盐（token）
        String salt = RandomUtil.randomString(16);
        //将密码和盐组合
        String pwd=user.getPassword() + salt;
        //使用md5算法加密
        pwd = SecureUtil.md5(pwd);
        //加密后的密码和随机盐设置到对象中
        user.setPassword(pwd);
        user.setSalt(salt);
        return userService.save(user);
    }

    @GetMapping("/login")
    public boolean login(String username,String password){
        User user = userService.getOne(Wrappers.query(User.class).eq("username",username));
        String salt=user.getSalt();
        String pwd_=SecureUtil.md5(password+salt);
        return pwd_.equals(user.getPassword());
    }

    @GetMapping("/update")
    public boolean update(User user) {
        boolean b = userService.exists(Wrappers.query(User.class).eq("id", user.getId()));
        if (!b) {
            return false;
        }
        return userService.updateById(user);
    }


//    @GetMapping("/list")
//    public List<User> list(){
//        return userService.list();
//    }
    @GetMapping("/list")
    public R list(@RequestParam(defaultValue = "1")Integer page, @RequestParam(defaultValue = "5") Integer limit) {
        List<User> list = userService.list(new Page<User>(page, limit));
        Long count = userService.count();
        return R.ok("查询成功").setData(list).setCount(count);
    }

    @GetMapping("/delete")
    public boolean deleteById(int id) {
        return userService.removeById(id);
    }
}
